原文全文传送门

我写这篇文章主要学习我不知道的独立调用时this的指向

this的指向,是在函数被调用的时候确定的,也就是执行上下文被创建时确定的。

(1)简单的指向全局

(2)函数中的this指向

在一个函数上下文中,this由调用者提供,由调用函数的方式来决定。如果函数独立调用,那么该函数内部的this,则指向undefined。但是在非严格模式中,当this指向undefined时,它会被自动指向全局对象。

var a = 20;
var obj = {
    a: 10,
    c: this.a + 20,
    fn: function () {
        return this.a;
    }
}

console.log(obj.c); //独立调用 非严格模式指向全局 40
console.log(obj.fn()); //对象调用 指向对象 10

当obj在全局声明时,无论obj.c在什么地方调用,这里的this都指向全局对象,而当obj在函数环境中声明时,这个this指向undefined,在非严格模式下,会自动转向全局对象。

var a = 20;
var foo = {
    a: 10,
    getA: function () {
        return this.a;
    }
}
console.log(foo.getA()); //非独立调用 10

var test = foo.getA;
console.log(test());  //独立调用 20

(3)用call或者apply显式更改this

(4)构造函数new对象this


luckyziv
1.2k 声望52 粉丝

摸索中前进!!